简介
Fish (Friendly Interactive Shell) 是一款智能化的命令行 shell,语法简洁、功能强大、支持自动补全。
安装
1 2 3 4 5
| sudo apt install fish
brew install fish
|
基础语法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| # 变量 set name "Tom" echo $name
# 条件 if test $name = "Tom" echo "Hello Tom" else echo "Hello stranger" end
# 循环 for i in (seq 5) echo $i end
# 函数 function greet echo "Hello $argv" end greet "World"
|
常用命令
1 2 3 4 5 6 7 8
| # 查看文件 cat, less, head, tail
# 查找文件 find . -name "*.txt"
# 进程管理 ps, kill, top
|
快捷键配置
使用 bind 命令
1 2 3 4 5 6 7 8
| # 查看现有绑定 bind --list
# 绑定快捷键 bind \cr history-search-backward # Ctrl+R 反向搜索历史 bind \cf forward-search-history # Ctrl+F 正向搜索历史 bind \cp up-or-search # Ctrl+P 上浏览历史 bind \cn down-or-search # Ctrl+N 下浏览历史
|
配置文件方式
在 ~/.config/fish/config.fish 中添加绑定:
1 2 3 4 5 6 7 8 9
| # ~/.config/fish/config.fish bind \cr history-search-backward bind \cf forward-search-history bind \cp up-or-search bind \cn down-or-search
# Alt+方向键 按词跳转 bind \e\[C forward-word bind \e\[D backward-word
|
自定义函数方式
在 ~/.config/fish/functions/ 创建 fish_user_key_bindings.fish:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| function fish_user_key_bindings # 基础快捷键 bind \cr history-search-backward bind \cf forward-search-history # 方向键 bind \e\[A history-search-backward bind \e\[B history-search-forward bind \e\[C forward-word bind \e\[D backward-word # Ctrl+方向键 bind \e\[1\;5C forward-word bind \e\[1\;5D backward-word end
|
常用快捷键
| 快捷键 |
功能 |
| Ctrl+R |
反向搜索历史 |
| Ctrl+P/N |
上/下浏览历史 |
| Alt+←/→ |
按词跳转 |
| Ctrl+←/→ |
按词跳转(部分终端) |
| Ctrl+C |
终止当前命令 |
| Ctrl+Z |
暂停当前命令 (fg 恢复) |
| Ctrl+L |
清屏 |
| Ctrl+A/E |
行首/行尾 |
插件管理
使用 Fisher 插件管理器:
1 2 3 4 5 6
| # 安装 Fisher curl -sL https://git.io/fisher | source && fisher install jorgebucaran/fisher
# 安装插件 fisher install jorgebucaran/nvm.fish fisher install oh-my-fish/theme-bobthefish
|
自动补全
Fish 自动提供:
- 命令参数补全
- 文件路径补全
- Git 子命令补全
- apt/dnf/yum 包名补全
手动补全文件位置:~/.config/fish/completions/
实用技巧
1 2 3 4 5 6 7 8 9 10 11
| # 设置别名 alias ll 'ls -lah'
# 查看函数定义 functions function_name
# 查看变量 echo $PATH
# 导出变量 export EDITOR "vim"
|
配置生效
修改 config.fish 后不需要重启 shell,Fish 会自动加载。
如需手动重载:
1
| source ~/.config/fish/config.fish
|
临时 vs 永久
| 命令 |
临时(当前 session) |
永久(写入配置) |
alias |
直接执行 alias ll 'ls -lah' |
写入 ~/.config/fish/config.fish |
bind |
直接执行 bind \cr history-search-backward |
写入 ~/.config/fish/config.fish |
1 2 3 4 5 6 7
| # 临时:当前终端有效,关闭后失效 alias ll 'ls -lah' bind \cr history-search-backward
# 永久:写入 ~/.config/fish/config.fish alias ll 'ls -lah' bind \cr history-search-backward
|
写入 config.fish 后每次启动 Fish 会自动加载,无需重复执行。
别名与快捷键的区别
| 特性 |
别名 (alias) |
快捷键 (bind) |
| 本质 |
命令的简写/缩写 |
按键与功能的映射 |
| 触发方式 |
输入完整别名后回车 |
直接按组合键 |
| 适用场景 |
长命令简化 |
增强交互体验 |
| 参数支持 |
有限制 |
完全支持 |
示例对比:
1 2 3 4 5
| # 别名:输入 ll 后等价于 ls -lah alias ll 'ls -lah'
# 快捷键:按 Ctrl+R 立即触发历史搜索 bind \cr history-search-backward
|
使用建议:
- 别名:用于简化常用命令,如
alias gc 'git commit'
- 快捷键:用于频繁交互操作,如搜索历史、单词跳转、清屏等
二者可以互补使用。